using System;
using System.Collections.Generic;
using System.Linq;
using Microsoft.Xna.Framework;
using Microsoft.Xna.Framework.Audio;
using Microsoft.Xna.Framework.Content;
using Microsoft.Xna.Framework.GamerServices;
using Microsoft.Xna.Framework.Graphics;
using Microsoft.Xna.Framework.Input;
using Microsoft.Xna.Framework.Media;

using modInterface;
using modDatos;

namespace modPeticiones
{
    public static class SCPeticion
    {
        #region
        //public static bool puedeLeer { get; set; }
        //public static bool puedeEscribir { get; set; }

        //static CSPeticion_datos data = new CSPeticion_datos();

        //public static modDatos.pqEstado_dat[] DaTodosDatosLan()
        //{
        //    modDatos.pqEstado_dat[] datos;

        //    int count = 0;

        //    foreach (modDatos.pqEstado_dat item in data.listData.Values)
        //    {
        //        if (item.destino == "Lan" || item.destino == "none")
        //            count++;                      
        //    }

        //    datos = new modDatos.pqEstado_dat[count];

        //    int i = 0;

        //    foreach (modDatos.pqEstado_dat item in data.listData.Values)
        //    {
        //        if (item.destino == "Lan" || item.destino == "none")
        //            datos[i] = item;

        //        i++;
        //    }

        //    return datos;
        //}

        //public static modDatos.pqEstadoMulti_dat[] DaTodosDatosMultiLan()
        //{            
        //        modDatos.pqEstadoMulti_dat[] datos;

        //        int count = 0;

        //        foreach (modDatos.pqEstadoMulti_dat item in data.listDtaMulti.Values)
        //        {
        //            if (item.destino == "Lan")
        //                count++;
        //        }

        //        datos = new modDatos.pqEstadoMulti_dat[count];

        //        int i = 0;

        //        foreach (modDatos.pqEstadoMulti_dat item in data.listDtaMulti.Values)
        //        {
        //            if (item.destino == "Lan")
        //                datos[i] = item;

        //            i++;
        //        }

        //        return datos;            
        //}

        //public static modDatos.pqEstado_dat DaDatos(string quien)
        //{
        //    while (!puedeLeer)
        //    {

        //    }
        //    //espeemos que exista ....

        //    modDatos.pqEstado estadoBUff = new modDatos.pqEstado();

        //    if (data.listData.ContainsKey(quien) == true)
        //    {
        //        return data.listData[quien];
        //    }
        //    else
        //    {
        //        estadoBUff.data.destino = "NO EXISTE";
        //        return estadoBUff.data;
        //    }
            
            
        //}

        //public static modDatos.pqEstadoMulti_dat DaDatosMultiples(string quien)
        //{
        //    while (!puedeLeer)
        //    {

        //    }
        //    return data.listDtaMulti[quien];
        //}

        //public static void RecolectaDatos(IActor actor, bool multiple)
        //{
        //    //ahora es bien cabesa, todos los objetos les dan sus ULTIMOS datos

        //    puedeLeer = false;

        //    if (!multiple)
        //    {
        //        if (actor.DarEstado() == null)
        //        {
        //            if (data.listData.ContainsKey(actor.returnName()) == true)
        //            {
        //                data.listData[actor.returnName()] = actor.DarEstado();
        //            }
        //            else
        //            {
        //                data.listData.Add(actor.returnName(), actor.DarEstado());
        //            }
        //        }
        //    }
        //    else
        //    {
        //        if (data.listDtaMulti.ContainsKey(actor.returnName()) == true)
        //        {
        //            data.listDtaMulti[actor.returnName()] = actor.DarEstadoMultiple();
        //        }
        //        else
        //        {
        //            data.listDtaMulti.Add(actor.returnName(), actor.DarEstadoMultiple());
        //        }
        //    }

        //    puedeLeer = true;
        //}

        //public static void RecolectaDatosSueltos(modDatos.pqEstado_dat estado, string key)
        //{

        //    puedeLeer = false;

        //    if (data.listData.ContainsKey(key) == true)
        //    {
        //        data.listData[key] = estado;
        //    }
        //    else
        //    {
        //        data.listData.Add(key, estado);
        //    }

        //    puedeLeer = true;
        //}

        //public static void RecolectaDatos(modDatos.pqEstadoMulti estado)
        //{
        //    puedeLeer = false;

        //    if (data.listDtaMulti.ContainsKey(estado.data.destino) == true)
        //    {
        //        data.listDtaMulti[estado.data.destino] = estado.data;
        //    }
        //    else
        //    {
        //        data.listDtaMulti.Add(estado.data.destino, estado.data);
        //    }

        //    puedeLeer = true;
        //}
        #endregion

        static public Dictionary<string, CDataGameBase> DatosGame = new Dictionary<string, CDataGameBase>();

        static private object thisLock = new object();

         static public void recivirDatos(string key, CDataGameBase datos)
         { 
            
         }

         static public Dictionary<string, CDataGameBase> BuscarDatos(string parteName)
         {
             lock (thisLock)
             {
                 Dictionary<string, CDataGameBase> Datos = new Dictionary<string, CDataGameBase>();
                 foreach (KeyValuePair<string, CDataGameBase> item in DatosGame)
                 {
                     if (item.Key.Contains(parteName) == true)
                     {
                         Datos.Add(item.Key, item.Value);
                     }
                 }
                 return Datos;
             }
         }

         static public void EliminarDatos(string parteName)
         {
             lock (thisLock)
             {
                 Dictionary<string, CDataGameBase> buffDatos = new Dictionary<string, CDataGameBase>();

                 foreach (KeyValuePair<string, CDataGameBase> item in DatosGame)
                 {
                     if (item.Key.Contains(parteName) == false)
                     {
                         buffDatos.Add(item.Key, item.Value);
                     }
                 }

                 DatosGame.Clear();
                 DatosGame = buffDatos;
             }
        }
    }
}
